# coding: utf-8
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns


def columns_missing_rate(df, vis=False, plot_n=10):
    '''
    对于df，检测每一列的缺失率(null)
    结果返回为，dataframe，index是列名，每一行指出该列属性的缺失个数(n_null)，缺失率(null_rate)，按从大到小排列
    还会把前plot_n个画出图
    '''
    null_count = df.apply(lambda x: x.isnull().sum(), axis=0)
    null_count = pd.DataFrame(null_count, columns=['n_null'])
    null_count['null_rate'] = null_count.n_null / len(df)
    null_count = null_count.sort_values('null_rate', ascending=False)
    if vis:
        null_count[['null_rate']][0:plot_n].plot(kind='bar')

    return null_count


def rows_missing_rate(df, vis=False):
    '''
    检测每一行的缺失率、缺失个数。
    返回dataframe，每一行指出原始数据中每一行的缺失个数(n_null)，缺失率(null_rate)，按从大到小排列
    会用散点图的形式画出。
    '''
    null_count = df.apply(lambda x: x.isnull().sum(), axis=1)
    null_count = pd.DataFrame(null_count, columns=['n_null'])
    null_count['null_rate'] = null_count.n_null / len(df.columns)
    null_count = null_count.sort_values('null_rate', ascending=False)
    if vis:
        plt.scatter(range(len(null_count)), null_count.null_rate.values, c='k')

    return null_count
